package com.skp.shaphan.sql;

public class SQLPreProcessor {
	private String sql;
	
	public SQLPreProcessor(String sql) {
		this.sql = sql;
	}
	
	public String process() {
		this.sql = sql.trim();
		if(sql.charAt(sql.length() - 1) == ';') {
			sql = sql.substring(0, sql.length() - 1);
		}
		lookForTokens("%CurrentDateIn");
		lookForTokens("%NumToChar");
		return sql;
	}
	
	protected void lookForTokens(String token) {
		SQLTokenInfo sti = lookForToken(token);
		while(sti.isTokenFound()) {
			processToken(sti);
			sti = lookForToken(token);
		}
	}
	
	protected void processToken(SQLTokenInfo sti) {
		String replaceText = sti.getToken();
		if(sti.getToken().equals("%CurrentDateIn")) {
			replaceText = resolveCurrentDateIn(sti);
		}
		if(sti.getToken().equals("%NumToChar")) {
			replaceText = resolveNumToChar(sti);
		}
		sql = sql.substring(0, sti.getStartIndex()) + replaceText + sql.substring(sti.getStartIndex() + sti.getFullText().length());
	}
	
	protected String resolveCurrentDateIn(SQLTokenInfo sti) {
		return sti.getToken();
	}
	
	protected String resolveNumToChar(SQLTokenInfo sti) {
		return sti.getToken();
	}
	
	protected SQLTokenInfo lookForToken(String token) {
		SQLTokenInfo sti = new SQLTokenInfo();
		sti.check(token, sql);
		return sti;
	}
}
